package com.atguigu.jdbc;

import java.sql.*;

/**
 * projectName: day04_jdbc
 *
 * @author: 赵伟风
 * time: 2021/11/26 14:02
 * description:使用jdbc静态的statement进行DQL语句操作
 */
public class JdbcDQL
{

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接
        String url = "jdbc:mysql://localhost:3306/test1";
        String user = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url,user,password);
        //3.创建statement
        Statement statement = connection.createStatement();
        //4.编写sql语句

        String sql = "select ename as name,mgr,job from emp;";

        //5.执行sql语句并获取resultSet
        // DQL以外的sql语句！
        // DML返回的影响行数    DDL TPL DCL  -> 0
        // statement.executeUpdate()
        /**
         * TODO: resultSet内部装的就是查询返回的虚拟数据表！ 由表头+数据组成！
         * TODO： 数据可能没有值，但是表头绝对存在！
         */
        ResultSet resultSet = statement.executeQuery(sql);

        //6.解析结果集

        /**
         * todo: 方案1 获取empno员工编号！
         */

        /**
         * TODO 1.移动光标
         *     next() return boolean
         *     默认情况下，光标指向第一行数据之前！
         *     移动光标可以将它指向数据！ 【current row】
         *     getString getInt getXxx getObject 获取【current row】的数据！
         *     return 解释，有更多行，移动光标到下一行，并返回true,如果没有更多行 返回false!
         *
         * TODO 2.当前行的列的数据
         *     getXxx(int columnIndex[1....]/String columnLabel)
         */

//        while (resultSet.next()){
////
////            String empNo = resultSet.getString(1);
////
////            System.out.println("empno = " + empNo);
////        }


        /**
         * todo: 方案2 获取empno信息
         */

        //包含表头的信息
        //列数和列名和别名
        ResultSetMetaData metaData = resultSet.getMetaData();

        //获取列数
        int columnCount = metaData.getColumnCount();

        //获取列名  不需要移动光标
        //index - 列的下角标 用来获取列名
        /**
         * metaData.getColumnName(int index) 获取的列名
         * metaData.getColumnLabel(int index) 起别名获取别名反之列名  【推荐】
         */


        while (resultSet.next()) {

            //todo 列名
//            String empno = resultSet.getString("empno");
//            String ename = resultSet.getString("ename");
//            String mgr = resultSet.getString("mgr");
            System.out.println("---------------");
            //todo index
            for (int i = 1; i <= columnCount; i++) {
                //获取数据
                String value = resultSet.getString(i);
                //获取列名
                String columnName = metaData.getColumnName(i);
                String columnLabel = metaData.getColumnLabel(i);
                System.out.println(columnName+" = " + value+" = "+columnLabel);
            }

            System.out.println("---------------");
        }
        //7.关闭资源

        resultSet.close();

        if (statement != null) {
            statement.close();
        }

        if (connection != null) {
            connection.close();
        }

    }


}
